package com.zzyl.common.pdf;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

public class PdfParser1 {

    /**
     * 解析PDF文件内容并返回字符串
     *
     * @param filePath PDF文件路径
     * @return 解析出的PDF文本内容
     * @throws IOException 如果文件读取或解析过程中发生错误
     */
    public static String extractTextFromPdf(String filePath) throws IOException {
        // 确保文件路径不为空
        if (filePath == null || filePath.trim().isEmpty()) {
            throw new IllegalArgumentException("PDF文件路径不能为空");
        }

        File pdfFile = new File(filePath);

        // 检查文件是否存在
        if (!pdfFile.exists()) {
            throw new IOException("指定的PDF文件不存在: " + filePath);
        }

        // 检查是否是文件
        if (!pdfFile.isFile()) {
            throw new IOException("指定的路径不是一个文件: " + filePath);
        }

        // 加载PDF文档
        try (PDDocument document = PDDocument.load(pdfFile)) {
            // 检查文档是否被加密
            if (document.isEncrypted()) {
                throw new IOException("无法解析加密的PDF文件: " + filePath);
            }

            // 创建PDF文本提取器
            PDFTextStripper stripper = new PDFTextStripper();

            // 可以设置提取的页码范围，默认提取所有页
            // stripper.setStartPage(1);
            // stripper.setEndPage(5);

            // 提取文本内容
            return stripper.getText(document);
        }
    }

    public static void main(String[] args) {
        // 示例用法
        String pdfFilePath = "D:\\Project\\139.pdf"; // 替换为你的PDF文件路径

        try {
            String pdfContent = extractTextFromPdf(pdfFilePath);
            System.out.println("PDF内容提取成功：");
            System.out.println("----------------------------------------");
            System.out.println(pdfContent);
            System.out.println("----------------------------------------");
            System.out.println("提取完成，共 " + pdfContent.length() + " 个字符");
        } catch (IOException e) {
            System.err.println("解析PDF时发生错误：" + e.getMessage());
            e.printStackTrace();
        }
    }
    public static String extractTextFromPdf(InputStream inputStream) throws IOException {
        // 加载PDF文档
        try (PDDocument document = PDDocument.load(inputStream)) {
            // 检查文档是否被加密
            if (document.isEncrypted()) {
                throw new IOException("PDF文件已加密，无法提取内容");
            }
            // 创建PDF文本提取器
            PDFTextStripper stripper = new PDFTextStripper();

            // 提取所有页面的文本
            return stripper.getText(document);
        }
    }

}

